home *** CD-ROM | disk | FTP | other *** search
/ 130 MIDI Tool Box / 130 MIDI Tool Box.iso / peek_pas / peek.pas next >
Pascal/Delphi Source File  |  1987-08-18  |  3KB  |  94 lines

  1.  
  2. PROGRAM PEEK;                                                   {tlb}
  3.  
  4. TYPE
  5.  
  6.   STR1 = STRING[1];
  7.   STR2 = STRING[2];
  8.  
  9. VAR
  10.  
  11.   J, MIDIDATA: BYTE;
  12.  
  13. CONST
  14.  
  15.   DATAPORT = $330;                      { THESE ARE PORT ADDRESSES FOR THE }
  16.   STATPORT = $331;                      { IBM VERSION OF THE MPU-401.      }
  17.   DRS      = $80;                       { THEY MUST BE CHANGED FOR OTHER   }
  18.   DRR      = $40;                       { MACHINES.                        }
  19.   ACK      = $FE;
  20.  
  21. PROCEDURE PUTDATA (MIDIDATA:BYTE);      { PUTS ONE BYTE TO MPU. }
  22.  
  23.   BEGIN
  24.  
  25.       J := 0;
  26.       REPEAT                            { REPEAT UNTIL DATA READY TO SEND  }
  27.         J := PORT [STATPORT];           { HAS CORRECT VALUE; THEN SEND     }
  28.       UNTIL (J AND DRR) = 0;            { MIDI DATA TO DATAPORT.           }
  29.       PORT [DATAPORT] := MIDIDATA;
  30.  
  31.   END;
  32.  
  33. PROCEDURE GETDATA (VAR MIDIDATA:BYTE);  { GETS ONE BYTE FROM MPU. }
  34.  
  35.   VAR
  36.  
  37.     J:BYTE;
  38.  
  39.   BEGIN
  40.  
  41.     J := 0;
  42.     REPEAT                              { LOOP UNTIL DATA READY TO RECEIVE }
  43.       J := PORT [STATPORT];             { HAS CORRECT VALUE; THEN GET MIDI }
  44.     UNTIL (J AND DRS) = 0;              { DATA FROM DATAPORT.              }
  45.     MIDIDATA := PORT [DATAPORT];
  46.  
  47.   END;
  48.  
  49. PROCEDURE PUTCMD (CMD:BYTE);            { SENDS COMMAND TO MPU. }
  50.  
  51.   BEGIN
  52.  
  53.     J := 0;
  54.     REPEAT                              { LOOP UNTIL DATA READY TO RECEIVE }
  55.       J := PORT [STATPORT];             { HAS CORRECT VALUE; THEN SEND     }
  56.     UNTIL (J AND DRR) = 0;              { COMMAND TO MPU.                  }
  57.     PORT [STATPORT] := CMD;
  58.  
  59.     REPEAT                              { WAIT IN LOOP UNTIL MPU SENDS BYTE  }
  60.       GETDATA(J);                       { TO ACKNOWLEDGE RECEIPT OF COMMAND. }
  61.     UNTIL J = ACK;
  62.  
  63.   END;
  64.  
  65. FUNCTION HEX(B:BYTE):STR2;
  66.  
  67.   CONST
  68.  
  69.     H : ARRAY [0..15] OF CHAR = '0123456789ABCDEF';
  70.  
  71.   BEGIN
  72.  
  73.     HEX := H [B SHR 4] + H [B AND 15];
  74.  
  75.   END;
  76.  
  77.  
  78.   { M A I N   P R O G R A M }
  79.  
  80. BEGIN
  81.  
  82.   PUTCMD ($3F);                      { PUT MPU INTO UART MODE. }
  83.   WRITELN ('UART ON...');
  84.  
  85.   REPEAT                             { BEGIN LOOP. }
  86.     GETDATA (MIDIDATA);              { GET MIDI DATA FROM MPU. }
  87.     IF (MIDIDATA <> $FE) THEN        { IF IT'S NOT AN ACTIVE-SENSING BYTE...}
  88.        WRITE (HEX (MIDIDATA), '  '); { ...THEN WRITE TO THE SCREEN.}
  89.   UNTIL KEYPRESSED = TRUE;           { REPEAT... }
  90.   PUTDATA ($FF);                     { RESET MPU. }
  91.  
  92. END.
  93. ---|
  94.      |                             | MG